﻿using System;
using System.Collections.Generic;
using Assist;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.Exceptions;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using YArchitech.Revit;
using YArchitech.Revit.Electric.Common;
using YArchitech.Revit.MEP.Calculator;
using YArchitech.Revit.MEP.Electric.Calculator;
using YArchitech.Revit.RevitExtension;

namespace HYElectricCalculation
{
	public class CmdCaculateCount
	{
		public CmdCaculateCount(UIApplication ui_app)
		{
			this.ui_app = ui_app;
			this.rvt_UIdoc = ui_app.ActiveUIDocument;
		}

		public List<AnnotationSymbol> FilterRectangle()
		{
			List<AnnotationSymbol> list = new List<AnnotationSymbol>();
			SelectionRoomTagFilter isFilter = new SelectionRoomTagFilter();
			List<string> list2 = new List<string>();
			CmdCaculateCount.beforeRoomTagByRec = CmdCaculateCount.GetSelectFilterByRectangle(this.rvt_UIdoc, isFilter);
			if (CmdCaculateCount.beforeRoomTagByRec == null || CmdCaculateCount.beforeRoomTagByRec.Count == 0)
			{
				return null;
			}
			foreach (Element element in CmdCaculateCount.beforeRoomTagByRec)
			{
				AnnotationSymbol annotationSymbol = element as AnnotationSymbol;
				if (annotationSymbol != null && annotationSymbol.Name == "房间照明标记")
				{
					list.Add(annotationSymbol);
					list2.Add(annotationSymbol.GetParameter("房间ID").AsString());
				}
			}
			return list;
		}

		public List<AnnotationSymbol> FilterCurrentView()
		{
			List<AnnotationSymbol> list = new List<AnnotationSymbol>();
			new SelectionRoomTagFilter();
			List<string> list2 = new List<string>();
			Level genLevel = this.rvt_UIdoc.Document.ActiveView.GenLevel;
			if (genLevel == null)
			{
				return null;
			}
			foreach (Element element in new FilteredElementCollector(this.rvt_UIdoc.Document).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_GenericAnnotation).ToElements())
			{
				AnnotationSymbol annotationSymbol = element as AnnotationSymbol;
				if (annotationSymbol != null && annotationSymbol.GetParameter("房间照明标记标高") != null && annotationSymbol.Name == "房间照明标记" && annotationSymbol.GetParameter("房间照明标记标高").AsString() == genLevel.Id.ToString())
				{
					list.Add(annotationSymbol);
					list2.Add(annotationSymbol.GetParameter("房间ID").AsString());
				}
			}
			return list;
		}

		public List<AnnotationSymbol> FileterProject(ElementId levelId)
		{
			List<AnnotationSymbol> list = new List<AnnotationSymbol>();
			new SelectionRoomTagFilter();
			Level genLevel = this.rvt_UIdoc.Document.ActiveView.GenLevel;
			foreach (Element element in new FilteredElementCollector(this.rvt_UIdoc.Document).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_GenericAnnotation).ToElements())
			{
				AnnotationSymbol annotationSymbol = element as AnnotationSymbol;
				if (annotationSymbol != null && annotationSymbol.Name == "房间照明标记" && annotationSymbol.GetParameter("房间照明标记标高").AsString() == levelId.ToString())
				{
					list.Add(annotationSymbol);
				}
			}
			return list;
		}

		public static FilteredElementCollector GetElementsOfType(Autodesk.Revit.DB.Document doc, Type type, BuiltInCategory bic)
		{
			FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
			filteredElementCollector.OfCategory(bic);
			filteredElementCollector.OfClass(type);
			return filteredElementCollector;
		}

		public static List<string> GetLinkFilePaths(Autodesk.Revit.DB.Document doc)
		{
			List<string> list = new List<string>();
			foreach (ElementId elementId in ExternalFileUtils.GetAllExternalFileReferences(doc))
			{
				if (doc.GetElement(elementId).IsExternalFileReference())
				{
					ExternalFileReference externalFileReference = doc.GetElement(elementId).GetExternalFileReference();
					if (1 == (int)externalFileReference.ExternalFileReferenceType)
					{
						list.Add(ModelPathUtils.ConvertModelPathToUserVisiblePath(externalFileReference.GetAbsolutePath()));
					}
				}
			}
			return list;
		}

		public Dictionary<Room, Transform> GetLinkAllRoom(UIApplication uiApp)
		{
			Dictionary<Room, Transform> dictionary = new Dictionary<Room, Transform>();
			Document document = uiApp.ActiveUIDocument.Document;
			FilteredElementCollector elementsOfType = CmdCaculateCount.GetElementsOfType(document, typeof(Instance), BuiltInCategory.OST_RvtLinks);
			IList<string> linkFilePaths = CmdCaculateCount.GetLinkFilePaths(document);
			foreach (Element element in elementsOfType)
			{
				Instance instance = element as Instance;
				if (instance != null)
				{
					Transform totalTransform = instance.GetTotalTransform();
					(document.GetElement(instance.GetTypeId()) as RevitLinkType).get_Parameter(BuiltInParameter.WALL_ATTR_ROOM_BOUNDING).Set(1);
					string value = instance.Name.Substring(0, instance.Name.IndexOf(".rvt"));
					string text = "";
					foreach (string text2 in linkFilePaths)
					{
						if (text2.Contains(value))
						{
							text = text2;
						}
					}
					FilteredElementCollector filteredElementCollector = new FilteredElementCollector(uiApp.Application.OpenDocumentFile(text));
					filteredElementCollector.OfCategory(BuiltInCategory.OST_Rooms);
					foreach (Element element2 in filteredElementCollector)
					{
						Room room = element2 as Room;
						if (room.Location != null)
						{
							dictionary.Add(room, totalTransform);
						}
					}
				}
			}
			return dictionary;
		}

		public IllCalDataSet GetCurretView(List<AnnotationSymbol> allRoomTag)
		{
			if (allRoomTag == null || allRoomTag.Count == 0)
			{
				return null;
			}
			IllCalDataSet illCalDataSet = new IllCalDataSet();
			List<Room> list = new List<Room>();
			List<IllCalData> list2 = new List<IllCalData>();
			List<Element> elementByCategory = Common.GetElementByCategory(this.rvt_UIdoc.Document, BuiltInCategory.OST_Rooms);
			FilteredElementCollector elementsOfType = Common.GetElementsOfType(this.rvt_UIdoc.Document, typeof(FamilyInstance), BuiltInCategory.OST_LightingFixtures);
			elementsOfType.ToElements();
			if (elementByCategory.Count == 0)
			{
				new Dictionary<Room, Transform>();
				foreach (KeyValuePair<Room, Transform> keyValuePair in this.GetLinkAllRoom(this.ui_app))
				{
					if (this.tf == null)
					{
						this.tf = keyValuePair.Value;
					}
					elementByCategory.Add(keyValuePair.Key);
				}
			}
			foreach (Element element in elementByCategory)
			{
				Room room = (Room)element;
				IllCalData illCalData = new IllCalData();
				RoomData roomData = new RoomData();
				List<FilledRegion> list3 = new List<FilledRegion>();
				for (int i = 0; i < allRoomTag.Count; i++)
				{
					if (allRoomTag[i].GetParameter("房间ID").AsString() == room.Id.ToString())
					{
						list3.Clear();
						list3 = this.GetRoomAreaLamp(this.rvt_UIdoc.Document, room, this.tf);
						list.Add(room);
						roomData.RoomIndex = i;
						roomData.RoomNumber = room.get_Parameter(BuiltInParameter.ROOM_NUMBER).AsString();
						roomData.RoomName = room.get_Parameter(BuiltInParameter.ROOM_NAME).AsString();
						roomData.RoomArea = AssistFunc.feet2ToM2(room.get_Parameter(BuiltInParameter.ROOM_AREA).AsDouble());
						roomData.WindowArea = allRoomTag[i].GetParameter("窗面积").AsDouble();
						roomData.WallPerimeter = AssistFunc.feetToMM(room.Perimeter) / 1000.0;
						roomData.RoomPerimeter = AssistFunc.feetToMM(room.Perimeter) / 1000.0;
						double num = room.GetParameter(BuiltInParameter.ROOM_UPPER_OFFSET).AsDouble();
						double num2 = room.GetParameter(BuiltInParameter.ROOM_LOWER_OFFSET).AsDouble();
						double roomHeight = AssistFunc.feetToMM(num - num2) / 1000.0;
						roomData.RoomHeight = roomHeight;
						roomData.CeilingFactor = room.get_Parameter(BuiltInParameter.RBS_ELEC_ROOM_REFLECTIVITY_CEILING).AsDouble() * 100.0;
						roomData.WallDownFactor = room.get_Parameter(BuiltInParameter.RBS_ELEC_ROOM_REFLECTIVITY_WALLS).AsDouble() * 100.0;
						roomData.FloorFactor = room.get_Parameter(BuiltInParameter.RBS_ELEC_ROOM_REFLECTIVITY_FLOOR).AsDouble() * 100.0;
						roomData.Lux = allRoomTag[i].GetParameter("标准照度").AsDouble();
						roomData.Lpd = allRoomTag[i].GetParameter("标准功率密度").AsDouble();
						roomData.WorkHeight = allRoomTag[i].GetParameter("工作面高度").AsDouble();
						new List<LampData>();
						List<RoomLampList> roomLampList = new List<RoomLampList>();
						List<string> calculateErrorInformation = new List<string>();
						List<string> list4 = new List<string>();
						RoomLampList roomLampList2 = null;
						List<List<FamilyInstance>> list5 = new List<List<FamilyInstance>>();
						List<FamilyInstance> list6 = null;
						foreach (Element element2 in elementsOfType)
						{
							FamilyInstance familyInstance = (FamilyInstance)element2;
							new LampData();
							new LightSourceData();
							FamilySymbol symbol = familyInstance.Symbol;
							if (familyInstance.Room == null)
							{
								Line line = YJKLineEx.YJKGetUnBound((familyInstance.Location as LocationPoint).Point, new XYZ(0.0, 0.0, 1.0));
								Options options = new Options();
								options.ComputeReferences = true;
								if (list3 == null || list3.Count <= 0)
								{
									continue;
								}
								using (List<GeometryObject>.Enumerator enumerator4 = RevitVersionFuncs.GetGeometryObjectArray(list3[0].get_Geometry(options)).GetEnumerator())
								{
									while (enumerator4.MoveNext())
									{
										GeometryObject geometryObject = enumerator4.Current;
										Solid solid = geometryObject as Solid;
										if (solid != null && solid.Edges != null)
										{
											FaceArray faces = solid.Faces;
											for (int j = 0; j < faces.Size; j++)
											{
												PlanarFace planarFace = faces.get_Item(j) as PlanarFace;
                                                if (planarFace.FaceNormal().IsAlmostEqualTo(new XYZ(0.0, 0.0, 1.0)) && 8 == (int)planarFace.Intersect(line))
												{
													this.GetLampParameters(familyInstance, ref list4, ref list6, ref roomLampList2, ref list5, ref roomLampList, roomData, allRoomTag[i], ref calculateErrorInformation);
												}
											}
										}
									}
									continue;
								}
							}
							if (room.Id == familyInstance.Room.Id)
							{
								this.GetLampParameters(familyInstance, ref list4, ref list6, ref roomLampList2, ref list5, ref roomLampList, roomData, allRoomTag[i], ref calculateErrorInformation);
							}
						}
						bool flag = true;
						foreach (List<FamilyInstance> fiList in list5)
						{
							flag = this.GetDinstinceHight(fiList, flag);
						}
						if (flag)
						{
							roomData.DinstinceHight = "满足";
						}
						else
						{
							roomData.DinstinceHight = "不满足";
						}
						illCalData.roomLampList = roomLampList;
						illCalData.roomData = roomData;
						illCalData.CalculateErrorInformation = calculateErrorInformation;
						list2.Add(illCalData);
					}
				}
				Transaction transaction = new Transaction(this.rvt_UIdoc.Document);
				transaction.Start("Delete");
				if (list3 != null && list3.Count > 0)
				{
					foreach (FilledRegion elem in list3)
					{
						this.rvt_UIdoc.Document.DeleteElement(elem);
					}
				}
				transaction.Commit();
			}
			illCalDataSet.listIllCalData = list2;
			return illCalDataSet;
		}

		public void GetLampParameters(FamilyInstance fmlyInstance, ref List<string> str, ref List<FamilyInstance> fmlList, ref RoomLampList rll, ref List<List<FamilyInstance>> familyInstanceList, ref List<RoomLampList> rllList, RoomData rd, AnnotationSymbol allRoomTag, ref List<string> ListError)
		{
			LampData lampData = new LampData();
			LightSourceData lightSourceData = new LightSourceData();
			FamilySymbol symbol = fmlyInstance.Symbol;
			string text = null;
			bool flag = false;
			string text2 = symbol.get_Parameter(BuiltInParameter.ALL_MODEL_FAMILY_NAME).AsString();
			string text3 = symbol.get_Parameter(BuiltInParameter.ALL_MODEL_TYPE_NAME).AsString();
			if (str.Count == 0)
			{
				fmlList = new List<FamilyInstance>();
				fmlList.Add(fmlyInstance);
				rll = new RoomLampList();
				str.Add(text2 + text3);
				rll.lampNum = 1;
			}
			else
			{
				if (str.Contains(text2 + text3))
				{
					fmlList.Add(fmlyInstance);
					rll.lampNum++;
					return;
				}
				fmlList = new List<FamilyInstance>();
				fmlList.Add(fmlyInstance);
				rll = new RoomLampList();
				str.Add(text2 + text3);
				rll.lampNum = 1;
			}
			lampData.Name = text2;
			lampData.Type = text3;
			string text4 = lampData.Name + lampData.Type;
			if (!ListError.Contains(text4))
			{
				text = text4 + "\n\r";
				flag = true;
			}
			lampData.MaintenanceFactor = allRoomTag.GetParameter("维护系数").AsDouble();
			if (allRoomTag.GetParameter("维护系数").AsDouble() == 0.0 && flag)
			{
				text += "    维护系数---参数值为零或不存在\n\r";
			}
			lampData.Spec = symbol.get_Parameter(BuiltInParameter.ALL_MODEL_TYPE_NAME).AsString();
			if (symbol.GetParameter("镇流器功率") != null)
			{
				lampData.BallastPower = this.RevitToK(symbol.GetParameter("镇流器功率").AsDouble());
				if (symbol.GetParameter("镇流器功率").AsDouble() == 0.0 && flag)
				{
					text += "    镇流器功率---值为零\n\r";
				}
			}
			else if (flag)
			{
				text += "    镇流器功率---缺少此参数\n\r";
			}
			else if (flag)
			{
				text += "    找不到灯具的GUID是否用盈建科工具进行布置灯具\n\r";
			}
			FindUseFactor findUseFactor = new FindUseFactor(lampData, rd, this.ui_app.Application.VersionNumber);
			double num = 0.0;
			findUseFactor.GetUseFactor(ref num);
			if (num == 0.0 && flag)
			{
				text += "    是否为灯具设置了利用系数值\n\r";
			}
			num += 0.005;
			string value = num.ToString("0.00");
			lampData.UseFactor = Convert.ToDouble(value);
			if (fmlyInstance.GetParameter("光源类别") != null)
			{
				lightSourceData.Type = fmlyInstance.GetParameter("光源类别").AsString();
				if (fmlyInstance.GetParameter("光源类别").AsDouble() == 0.0 && flag)
				{
					text += "    光源类别---值为零\n\r";
				}
			}
			else if (flag)
			{
				text += "    光源类别---缺少此参数\n\r";
			}
			if (fmlyInstance.GetParameter("光源数量") != null)
			{
				lightSourceData.Number = fmlyInstance.GetParameter("光源数量").AsInteger();
				if (fmlyInstance.GetParameter("光源数量").AsInteger() == 0 && flag)
				{
					text += "    光源数量---值为零\n\r";
				}
			}
			else if (flag)
			{
				text += "    光源数量---缺少此参数\n\r";
			}
			if (symbol.GetParameter("光源型号") != null)
			{
				lightSourceData.Model = symbol.GetParameter("光源型号").AsString();
				if (symbol.GetParameter("光源型号").AsString() == "" && flag)
				{
					text += "    光源型号---值为空\n\r";
				}
			}
			else if (flag)
			{
				text += "    光源型号---缺少此参数\n\r";
			}
			if (fmlyInstance.GetParameter("光源功率") != null)
			{
				lightSourceData.Power = this.RevitToK(fmlyInstance.GetParameter("光源功率").AsDouble());
				if (fmlyInstance.GetParameter("光源功率").AsDouble() == 0.0 && flag)
				{
					text += "    光源功率---值为零\n\r";
				}
			}
			else if (flag)
			{
				text += "    光源功率---缺少此参数\n\r";
			}
			lightSourceData.LuminousFlux = symbol.get_Parameter(BuiltInParameter.FBX_LIGHT_LIMUNOUS_FLUX).AsDouble();
			ListError.Add(text);
			rll.lampData = lampData;
			rll.lightSourceData = lightSourceData;
			familyInstanceList.Add(fmlList);
			rllList.Add(rll);
		}

		private XYZ TransformPoint(XYZ point, Transform transform)
		{
			double x = point.X;
			double y = point.Y;
			double z = point.Z;
			XYZ xyz = transform.get_Basis(0);
			XYZ xyz2 = transform.get_Basis(1);
			XYZ xyz3 = transform.get_Basis(2);
			XYZ origin = transform.Origin;
			double num = x * xyz.X + y * xyz2.X + z * xyz3.X + origin.X;
			double num2 = x * xyz.Y + y * xyz2.Y + z * xyz3.Y + origin.Y;
			double num3 = x * xyz.Z + y * xyz2.Z + z * xyz3.Z + origin.Z;
			return new XYZ(num, num2, num3);
		}

		public List<FilledRegion> GetRoomAreaLamp(Autodesk.Revit.DB.Document doc, Room rom, Transform tf)
		{
			List<IList<Curve>> list = new List<IList<Curve>>();
			IList<Element> list2 = new FilteredElementCollector(doc).OfClass(typeof(FilledRegionType)).ToElements();
			SpatialElementBoundaryOptions spatialElementBoundaryOptions = new SpatialElementBoundaryOptions();
			ElementId id = doc.ActiveView.Id;
			spatialElementBoundaryOptions.StoreFreeBoundaryFaces = true;
			IEnumerable<IList<BoundarySegment>> boundarySegments = rom.GetBoundarySegments(spatialElementBoundaryOptions);
			Transaction transaction = new Transaction(doc);
			transaction.Start("fillregion");
			foreach (IEnumerable<BoundarySegment> enumerable in boundarySegments)
			{
				List<Curve> list3 = new List<Curve>();
				foreach (BoundarySegment segment in enumerable)
				{
					list3.Add(segment.GetCurve());
				}
				list.Add(list3);
			}
			List<CurveLoop> list4 = new List<CurveLoop>();
			foreach (IEnumerable<Curve> enumerable2 in list)
			{
				List<Curve> list5 = new List<Curve>();
				foreach (Curve curve in enumerable2)
				{
					if (tf == null)
					{
						list5.Add(curve);
					}
					else
					{
						XYZ startPoint = this.TransformPoint(curve.GetEndPoint(0), tf);
						XYZ endPoint = this.TransformPoint(curve.GetEndPoint(1), tf);
						Curve item = YJKLineEx.YJKGetBound(startPoint, endPoint);
						list5.Add(item);
					}
				}
				list4.Add(CurveLoop.Create(list5));
			}
			if (list4.Count == 0)
			{
				transaction.RollBack();
				return null;
			}
			List<FilledRegion> list6 = new List<FilledRegion>();
			foreach (Element element in list2)
			{
				FilledRegionType filledRegionType = (FilledRegionType)element;
				if (list6.Count > 0)
				{
					break;
				}
				FilledRegion item2 = FilledRegion.Create(doc, filledRegionType.Id, id, list4);
				list6.Add(item2);
			}
			this.rvt_UIdoc.Document.Regenerate();
			transaction.Commit();
			return list6;
		}

		public bool GetDinstinceHight(List<FamilyInstance> fiList, bool ischeck)
		{
			double num = 0.0;
			double num2 = 0.0;
			FamilySymbol familySymbol = null;
			foreach (FamilyInstance familyInstance in fiList)
			{
				if (familySymbol == null)
				{
					familySymbol = familyInstance.Symbol;
				}
				if (num2 == 0.0 && familyInstance.GetParameter("安装高度") != null)
				{
					num2 = familyInstance.GetParameter("安装高度").AsDouble();
				}
				XYZ point = (familyInstance.Location as LocationPoint).Point;
				foreach (FamilyInstance familyInstance2 in fiList)
				{
					XYZ point2 = (familyInstance2.Location as LocationPoint).Point;
					double num3 = point.DistanceTo(point2);
					if (num3 != 0.0)
					{
						if (num == 0.0)
						{
							num = num3;
						}
						if (num3 < num)
						{
							num = num3;
						}
					}
				}
			}
			return familySymbol.GetParameter("距高比A-A") == null || num / num2 > familySymbol.GetParameter("距高比A-A").AsDouble();
		}

		public IllCalDataSet GetCalResultData(List<AnnotationSymbol> li)
		{
			IllCalDataSet curretView = this.GetCurretView(li);
			if (curretView == null)
			{
				return null;
			}
			for (int i = 0; i < curretView.listIllCalData.Count; i++)
			{
				IllCalData illCalData = curretView.listIllCalData[i];
				CalResultData calResultData = new CalResultData();
				double num = 0.0;
				double num2 = 0.0;
				for (int j = 0; j < illCalData.roomLampList.Count; j++)
				{
					RoomLampList roomLampList = illCalData.roomLampList[j];
					IllCalculate illCalculate = new IllCalculate(illCalData.roomData, roomLampList.lampData, roomLampList.lightSourceData, IllCalType.eIllCheck, roomLampList.lampNum);
					illCalculate.Cal();
					num += illCalculate.ResultData.Lux;
					num2 += illCalculate.ResultData.Lpd;
				}
				calResultData.Lux = num;
				calResultData.Lpd = num2;
				if (illCalData.roomData.Lux <= num)
				{
					calResultData.LuxChecked = CheckedState.eMeet;
				}
				else if (num == 0.0)
				{
					calResultData.LuxChecked = CheckedState.eUnknown;
				}
				else
				{
					calResultData.LuxChecked = CheckedState.eNoMeet;
				}
				if (illCalData.roomData.Lpd >= num2)
				{
					calResultData.LpdChecked = CheckedState.eMeet;
				}
				else if (num2 == 0.0)
				{
					calResultData.LpdChecked = CheckedState.eUnknown;
				}
				else
				{
					calResultData.LpdChecked = CheckedState.eNoMeet;
				}
				illCalData.calResultData = calResultData;
			}
			return curretView;
		}

		public static IList<Element> GetSelectFilterByRectangle(UIDocument rvt_UIdoc, ISelectionFilter isFilter)
		{
			IList<Element> result;
			try
			{
				WindowHelper.SendMessageToWndRevit();
				IList<Element> list = rvt_UIdoc.Selection.PickElementsByRectangle(isFilter, "请选择需要统计的区域");
				if (list == null || list.Count == 0)
				{
					result = null;
				}
				else
				{
					result = list;
				}
			}
			catch (Autodesk.Revit.Exceptions.OperationCanceledException)
			{
				result = null;
			}
			catch (Exception ex)
			{
				ex.Message.ToString();
				result = null;
			}
			return result;
		}

		private double RevitToK(double revit)
		{
			return Math.Round(revit / 10.7639104167079, MidpointRounding.AwayFromZero);
		}

		public Dictionary<string, ElementId> GetSystemFamilyElementList<T>(Autodesk.Revit.DB.Document doc)
		{
			Dictionary<string, ElementId> dictionary = new Dictionary<string, ElementId>();
			try
			{
				foreach (Element element in new FilteredElementCollector(doc).OfClass(typeof(T)).ToElements())
				{
					if (element is T)
					{
						dictionary.Add(element.Name, element.Id);
					}
				}
			}
			catch (Exception ex)
			{
				ex.Message.ToString();
			}
			return dictionary;
		}

		private UIDocument rvt_UIdoc;

		private UIApplication ui_app;

		public static IList<Element> beforeRoomTagByRec;

		private Transform tf;

		public const string STR_BALLASTPOWER = "镇流器功率";

		public const string STR_LIGHTSOURCETYPE = "光源类别";

		public const string STR_LIGHTSOURCENUM = "光源数量";

		public const string STR_LIGHTSOURCEMODEL = "光源型号";

		public const string STR_LIGHTSOURCEPOWER = "光源功率";

		public const string STR_MAINTENANCEFACTOR = "维护系数";

		public const string STr_ZOREANDNULL = "---参数值为零或不存在";
	}
}
